//这代码虽臃肿了一些，但是和官方题解是一样的。复杂度也一致。只不过多了一些边界检查条件
class Solution {
    public List<List<Integer>> generate(int numRows) {
        //外层
        ArrayList<List<Integer>> outer = new ArrayList<>();
        //边界检查
        if(numRows == 2 || numRows == 1){ //nums是1或2，直接return outer
            for (int i = 0; i < numRows; i++) {
                ArrayList<Integer> inner = new ArrayList<>();
                for (int j = 0; j < i+1; j++) {
                    inner.add(1);
                }
                outer.add(inner);
            }
            return outer;
        }else {     //如果不是的话，继续追加
            for (int i = 0; i < 2; i++) {
                ArrayList<Integer> inner = new ArrayList<>();
                for (int j = 0; j < i+1; j++) {
                    inner.add(1);
                }
                outer.add(inner);
            }
            for (int i = 3; i <= numRows; i++) {
                ArrayList<Integer> inner = new ArrayList<>();
                for (int j = 0; j < i; j++) {
                    if (j == 0 || j == i-1){
                        inner.add(1);
                    }else {
                        inner.add(outer.get(i-2).get(j-1) + outer.get(i-2).get(j));
                    }
                }
                outer.add(inner);
            }
        }
        return outer;
    }
}